package evaluadores;

import cromosomas.Arbol;
import cromosomas.CromosomaEstrategia;
import cromosomas.Hormiga;
import cromosomas.Tablero;
import elementosEvolutivos.Cromosoma;
import elementosEvolutivos.Evaluador;

public class EvaluadorHormiga implements Evaluador
{
	private int pasos;
	private Tablero tab;
	
	public EvaluadorHormiga(){
		pasos=0;
	}
	@Override
	public double evaluar(Cromosoma cr) {
		CromosomaEstrategia cre = (CromosomaEstrategia)cr;
		tab = new Tablero();
		Hormiga h= new Hormiga(tab);
		pasos=0;
		while(pasos<400 && h.getComida()<90)
			ejecutarArbol(tab,h,cre.getArbol());
		return h.getComida();
	}
	
	public void ejecutarArbol(Tablero tab, Hormiga h, Arbol a){
		if(pasos<400 && h.getComida()<90){
			switch (a.getTipo()){
			case AVANZA:
				pasos++;
				h.Avanza();
				break;
			case DERECHA:
				pasos++;
				h.giraDerecha();
				break;
			case IZQUIERDA:
				pasos++;
				h.giraIzquierda();
				break;
			case SIC:
				if(h.hayComidaDelante())
					ejecutarArbol(tab,h,a.getHijos()[0]);
				else
					ejecutarArbol(tab,h,a.getHijos()[1]);
				break;
			case PROGN2:
				ejecutarArbol(tab,h,a.getHijos()[0]);
				ejecutarArbol(tab,h,a.getHijos()[1]);
				break;
			case PROGN3:
				ejecutarArbol(tab,h,a.getHijos()[0]);
				ejecutarArbol(tab,h,a.getHijos()[1]);
				ejecutarArbol(tab,h,a.getHijos()[2]);
				break;
			}
		}
	}
	
	public Tablero getTablero(){
		return tab;
	}

}
